#include	"board.h"
#include  	<rtthread.h>   //这个和rt-thread的内核相关

/*******************嵌套向量中断控制器NVIC的配置*******************************************/
//静态函数,本文件可用,对外部不可见
//NVIC配置
static	void NVIC_Configuration(void)
{
	NVIC_InitTypeDef	NVIC_InitStructure;
	
	//配置NVIC为优先级1组(主-1bit,子-3bit),然后了。。。。
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	
	//配置中断号码   按键1
	NVIC_InitStructure.NVIC_IRQChannel=RA2_INT_EXTI_IRQ;
	//配置抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
	//配置子优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
	//使能中断通道
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	//执行配置
	NVIC_Init  ( &NVIC_InitStructure ); 
}

//EXTI中断配置
void	EXTI_Config(void)
{
	//相关的初始化结构体
	GPIO_InitTypeDef GPIO_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	
	//开启按键GPIO的时钟
	RCC_APB2PeriphClockCmd(RA2_INT_GPIO_CLK,ENABLE);
	//配置NVIC中断
	NVIC_Configuration();
	
	/******************RA2中断管脚配置*******************************/
	//按键配置
	//用到的GPIO
	GPIO_InitStructure.GPIO_Pin=RA2_INT_GPIO_PIN;
	//既然是输入那就得为浮空输入
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	//因为是输入故不需要速度
	GPIO_Init  (RA2_INT_GPIO_PORT,&GPIO_InitStructure);
	//上面的只是配置了一下NVIC中断控制器
	
	//下面配置EXTI的信号源
	GPIO_EXTILineConfig  (RA2_INT_EXTI_PORTSOURCE,RA2_INT_EXTI_PINSOURCE); 
	//初始化EXTI_InitStructure结构体
	EXTI_InitStructure.EXTI_Line=RA2_INT_EXTI_LINE;   //外部中断线
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;  //中断模式
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising; //上升沿触发
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;              //使能中断
	//开始配置
	EXTI_Init  (&EXTI_InitStructure);
}



/**
 * @brief LoRA模块中断
 * @param 无
 * @retval 无
 */
void RA2_IRQHandler(void)
{
	if(EXTI_GetITStatus(RA2_INT_EXTI_LINE)==SET)  //EXTI_Line产生了中断
    {
        EXTI_ClearITPendingBit(RA2_INT_EXTI_LINE);
		/*释放信号量，通知LoRA主线程*/
		rt_sem_release(LoRA_sem);	
    }
}


